今天我們來實作如何在k8s上部署的服務http server和grpc server。
首先我們要將先前開發完成的二個服務http server和grpc server打包成映像檔,上傳到GCP上的Container Repository,這樣映像檔才能被k8s使用。
上傳映像檔
docker push gcr.io/xxxxxx/mygrpcserver:v1.0.0
docker push gcr.io/xxxxxx/myhttpserver:v1.0.0
接下來我們先建立一個Namespace名字叫dev-ithome
代表這次要使用的開發環境。
kubectl create namespace dev-ithome
接下來我們先建立yaml
# deploy_gs.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: gs
namespace: dev-ithome
spec:
selector:
matchLabels:
app: gs
replicas: 1
template:
metadata:
labels:
app: gs
spec:
containers:
- name: gs
image: gcr.io/xxxxxx/mygrpcserver:v1.0.0
imagePullPolicy: Always
env:
- name: AppEnv
value: "dev"
ports:
- name: gs-port
containerPort: 8081
livenessProbe:
tcpSocket:
port: 8081
# service_gs.yaml
apiVersion: v1
kind: Service
metadata:
name: gs
namespace: dev-ithome
spec:
type: ClusterIP
ports:
- name: http
port: 8081
targetPort: 8081
protocol: TCP
selector:
app: gs
# deploy_hs.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: hs
namespace: dev-ithome
spec:
selector:
matchLabels:
app: hs
replicas: 1
template:
metadata:
labels:
app: hs
spec:
containers:
- name: hs
image: gcr.io/xxxxxx/myhttpserver:v1.0.1
imagePullPolicy: Always
env:
- name: AppEnv
value: "dev"
ports:
- name: hs-port
containerPort: 8080
livenessProbe:
tcpSocket:
port: 8080
# service_hs.yaml
apiVersion: v1
kind: Service
metadata:
name: hs
namespace: dev-ithome
spec:
type: ClusterIP
ports:
- name: http
port: 8080
targetPort: 8080
protocol: TCP
selector:
app: hs
接下來我們要開始部署k8s
kubectl -n dev-ithome apply -f deploy_gs.yaml
kubectl -n dev-ithome apply -f deploy_hs.yaml
kubectl -n dev-ithome apply -f service_gs.yaml
kubectl -n dev-ithome apply -f service_hs.yaml
部署完成後,檢查看看系統狀況
kubectl -n dev-ithome get pods
NAME READY STATUS RESTARTS AGE
gs-5cb56569dd-bjlms 1/1 Running 0 6m13s
hs-6dc894d94-dmq6f 1/1 Running 0 6m10s
kubectl -n dev-ithome get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gs ClusterIP 10.229.6.255 <none> 8081:32494/TCP 10m
hs ClusterIP 10.229.2.35 <none> 8080:32019/TCP 10m
透過port-forward檢查系統
kubectl -n dev-ithome port-forward svc/hs 8080:80
k8s的服務基本上已經部署完成,但是一般的使用者,不可能像我們一樣用port-forward
的方式來連線,所以在下一篇我們將實際操作如何綁定IP,讓使用者用IP來做連線。